package br.com.cfccultura.admin.control.actions.utils;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.InputStream;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.IOUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.imgscalr.Scalr;
import org.imgscalr.Scalr.Method;
import org.springframework.stereotype.Component;

import br.com.cfccultura.admin.control.actions.DefaultAction;
import br.com.cfccultura.admin.control.forms.utils.AnexoForm;
import br.com.cfccultura.admin.model.vo.Anexo;
import br.com.cfccultura.admin.model.vo.MovimentoAnexo;

@Component("/anexo")
public class AnexoAction extends DefaultAction {

	public ActionForward view(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)	throws Exception {
		
		AnexoForm anexoForm = (AnexoForm) form;
		
		byte[] binario = null;
		String extensao = "JPG";
		if(anexoForm.getTipo() == 1) { //Movimento
			MovimentoAnexo anexo = getFluxoCaixaDAO().consultaAnexo(anexoForm.getCodigo());
			binario = anexo.getArquivo();
			anexo.getNome().subSequence(0, anexo.getNome().length()-3);
		} else if(anexoForm.getTipo() == 2) { //Aluno
			Anexo anexo = getAlunoDAO().getAnexo(anexoForm.getCodigo());
			binario = anexo.getBinario();
			anexo.getNome().subSequence(0, anexo.getNome().length()-3);
		}
		
		response.setContentType("image-jpg");
		
		int tamanho = 0;
		if(anexoForm.getTamanho() != null && anexoForm.getTamanho().intValue() > 0) {
			tamanho = anexoForm.getTamanho().intValue();
		}
		
		synchronized(anexoForm) {			
			if(tamanho > 10) {
				InputStream in = new ByteArrayInputStream(binario);
				BufferedImage bImageFromConvert = ImageIO.read(in);
				BufferedImage thumbnail = Scalr.resize(bImageFromConvert, Method.SPEED, tamanho);
				ImageIO.write(thumbnail, extensao, response.getOutputStream());				
	
			} else {
				IOUtils.write(binario, response.getOutputStream());
			}
		}

		return null;
	}
	
	public ActionForward attach(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)	throws Exception {

		AnexoForm anexoForm = (AnexoForm) form;
		
		if(anexoForm.getTipo() == 1) { //Anexo Movimento
			MovimentoAnexo anexo = new MovimentoAnexo();
			anexo.setArquivo(anexoForm.getAnexo().getFileData());
			anexo.setNome(anexoForm.getAnexo().getFileName());
			
			getFluxoCaixaDAO().incluir(anexoForm.getMovimento(), anexo);
		}
		
		return null;
	}
	
	public ActionForward excluir(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)	throws Exception {

		AnexoForm anexoForm = (AnexoForm) form;
		
		if(anexoForm.getTipo() == 1) { //Anexo Movimento

		} else if(anexoForm.getTipo() == 2) {
			getAlunoDAO().excluir(anexoForm.getCodigo());
		}
		
		return null;
	}

}
